/*
 * @version: 
 * @Author: yu
 * @Date: 2023-07-10 15:59:26
 * @LastEditors: Andy
 * @LastEditTime: 2023-07-13 16:44:56
 */
import axios, { AxiosInstance, AxiosRequestConfig } from 'axios'
import qsString from 'querystring'
import router from '@/router';
import store from '@/store';
import { ElMessage } from "element-plus";

//axios 内置方法
//重新创建一个实例
// axios.create({
//     baseURL:'基础的地址'
// })
const config = {
    baseURL: '/api'
}


// 创建一个类  把拦截器 和 请求方式封装到当前的类中
class Http {
    http: AxiosInstance
    //构造器
    constructor(config: AxiosRequestConfig) {
        //定义  初始化属性
        this.http = axios.create(config)
        //创建拦截器
        this.http.interceptors.request.use((req) => {
            if (config.url !== '/api/userlogin') {
                //处理token令牌的校验
                if (store.state.user) {
                    req.headers.authorization = store.state.user.token
                } else {
                    router.push('/login')
                }
            }
            return req
        })

        this.http.interceptors.response.use((res) => {
            if (res.data.code !== 200) {
                ElMessage.error(res.data.msg)
                router.push('/login')
            }

           return  res.data
        })
    }

    //方法之 get
    /* get   参数   url   params */
    get(url: string, params = {}) {
        return this.http.get(url, {
            params
        })
    }

    //方法之 post
    /* 
  post 参数
  url 
  params 
  post 方式比较特殊，它分为是否有上传文件
  */

    post(url: string, params = {}, isFile = false) {
        let data: any = {}
        if (isFile) {
            //如果上传文件  是不是就用FormDate进行转化
            data = new FormData()
            // console.log(Object.entries(params), 999999999)
            for (const [key, value] of Object.entries(params)) {
                data.append(key, value)
            }
        } else {
            data = qsString.stringify(params)
        }
        return this.http.post(url, data)
    }

}


//实列化类
export default new Http(config)